const Router = require('koa-router')
// 创建router
const flowersRouter = new Router()
// 引入Flowers数据库模块
const Flowers = require('../../models/Flowers')
flowersRouter.get('/',async (ctx) =>{
    ctx.status = 200
    ctx.body = {
        status:200,
        data:{
            value:"flowers首页",
        }
    }
})
/**
 * @route POST api/flowers/create
 * @description 创建鲜花信息接口
 * @access      接口公开
 */
flowersRouter.post('/create',async(ctx) =>{
    // 操作数据库,查看是否有相同名字的鲜花
    const findData = await Flowers.find({
        name:ctx.request.body.name
    })
    if(findData.length !== 0 ){
        ctx.status = 403
        ctx.body = {
            status: 403, 
            msg: '此名称的鲜花已存在'
        }
    }else{
        // 正确执行时,创建集合实例化数据
        const flower = new Flowers({
            name:ctx.request.body.name,
            type:ctx.request.body.type,
            price:ctx.request.body.price,
            information:ctx.request.body.information,
            src:ctx.request.body.src,
            hot:ctx.request.body?.hot,
            inventory:ctx.request.body?.inventory,
            allSalesVolumes:ctx.request.body?.allSalesVolumes,
        })
        // 保存到数据库之中
        flower.save()
        // 向客户端返回数据
        ctx.status = 200
        ctx.body = {
            status:ctx.status,
            success:true,
            data:{
                flower
            },
            msg:'新的鲜花信息创建成功'
        }
    }    
})
/**
 * @route POST api/flowers/delete
 * @description 删除鲜花信息接口
 * @access      接口公开
 */
flowersRouter.post('/delete',async (ctx) =>{
    const _id = ctx.request.body.id
    // 操作数据库,获取全部的鲜花
    const data = await Flowers.findOne({ 
        _id
    })
    if(!data){
        ctx.status = 403
        ctx.body = {
            status:ctx.status,
            msg:'该鲜花不存在！',
            success:false
        }
    }else{
        await Flowers.remove({_id})
        ctx.status = 200
        ctx.body = {
            status:ctx.status,
            msg:'鲜花删除成功！',
            success:true,
        }
    }
})
/**
 * @route POST api/flowers/modify
 * @description 修改鲜花信息接口
 * @access      接口公开
 */
flowersRouter.post('/modify', async (ctx) =>{
    const _id = ctx.request.body._id
    let update = {}
    ctx.request.body.name && (update.name = ctx.request.body.name)
    ctx.request.body.price && (update.price = ctx.request.body.price)
    ctx.request.body.src && (update.src = ctx.request.body.src)
    ctx.request.body.type && (update.type = ctx.request.body.type)
    ctx.request.body.inventory && (update.inventory = ctx.request.body.inventory)
    ctx.request.body.allSalesVolumes && (update.allSalesVolumes = ctx.request.body.allSalesVolumes)
    update.hot = ctx.request.body.hot // 如果传进来的是false的话，后面的就不执行了
    // ctx.request.body.hot && (update.hot = ctx.request.body.hot)
    ctx.request.body.information && (update.information = ctx.request.body.information)
    // 存储到数据库
    await Flowers.findByIdAndUpdate(_id, update, { new: true })
    // 向客户端返回数据
    ctx.status = 200
    ctx.body = {
        status : ctx.status,
        success:true,
        data:{
            update
        },
        msg:'鲜花更新成功'
    }
})
/**
 * @route POST api/flowers/hotSelling
 * @description 获取热销鲜花信息
 * @access      接口公开
 */
flowersRouter.post('/hotSelling',async (ctx) =>{
    // 查看是否有热销的产品,limit限制发8条
    const findData = await Flowers.find({
        hot:true
    },null,{limit:8})
    if(findData.length ==0){
        ctx.status = 403
        ctx.body = {
            status:ctx.status,
            msg:'没有热销产品！',
            success:false
        }
    }else{
        // 向客户端返回数据
        ctx.status = 200
        ctx.body = {
            status:ctx.status,
            success:true,
            data:{
                findData
            },
            msg:'热销产品数据返回成功'
        }
    }
})
/**
 * @route POST api/flowers/NonhotSelling
 * @description 获取非热销鲜花信息
 * @access      接口公开
 */
flowersRouter.post('/NonhotSelling',async (ctx) =>{
    // 查看是否有非热销的产品,limit限制发8条
    const findData = await Flowers.find({
        hot:false
    },null,{limit:8})
    if(findData.length ==0){
        ctx.status = 403
        ctx.body = {
            status:ctx.status,
            msg:'没有非热销产品！',
            success:false
        }
    }else{
        // 向客户端返回数据
        ctx.status = 200
        ctx.body = {
            status:ctx.status,
            success:true,
            data:{
                findData
            },
            msg:'非热销产品数据返回成功'
        }
    }
})
/**
 * @route GET api/flowers/type
 * @description 获取鲜花的所有种类值
 * @access      接口公开
 */
flowersRouter.get('/typeAll',async (ctx) =>{
    const typeData = await Flowers.distinct("type")
    if(typeData.length ==0){
        ctx.status = 403
        ctx.body = {
            status:ctx.status,
            msg:'没有找到指定属性！',
            success:false
        }
    }else{
        // 向客户端返回数据
        ctx.status = 200
        ctx.body = {
            status:ctx.status,
            success:true,
            data:{
                typeData
            },
            msg:'所有鲜花种类返回成功'
        }
    }
})
/**
 * @route POST api/flowers/typeDelete
 * @description 删除指定种类的鲜花
 * @access      接口公开
 */
flowersRouter.post('/typeDelete',async (ctx) =>{
        await Flowers.remove({type:ctx.request.body.type})
        ctx.status = 200
        ctx.body = {
            status:ctx.status,
            msg:'该种类鲜花删除成功！',
            success:true,
        }
})
/**
 * @route GET api/flowers/detailsInformation
 * @description 获取鲜花详情信息
 * @access      接口公开
 */
flowersRouter.get('/detailsInformation', async (ctx)=>{
    // 查看是否有符合条件的鲜花
    const findData = await Flowers.find({
        _id:ctx.query._id
    })
    // 进行判断
    if(findData.length === 0){
        ctx.status = 403
        ctx.body = {
            status:ctx.status,
            msg:'没有此鲜花！',
            success:false
        }
    }else{
        // 向客户端返回数据
        ctx.status = 200
        ctx.body = {
            status:ctx.status,
            success:true,
            data:{
                findData
            },
            msg:'鲜花数据返回成功'
        }
    }
})
/**
 * @route GET api/flowers/type
 * @description 根据鲜花类型返回数据
 * @access      接口公开
 */
flowersRouter.get('/type', async (ctx) =>{
    let findData = []
    if(ctx.query.type == 'all'){
        findData = await Flowers.find({})
    }else{
        findData = await Flowers.find({
            type:ctx.query.type
        })
    }
    // 进行判断
    if(findData.length === 0){
        ctx.status = 403
        ctx.body = {
            status:ctx.status,
            msg:'没有此种类的鲜花',
            success:false
        }
    }else{
        // 向客户端返回数据
        ctx.status = 200
        ctx.body = {
            status:ctx.status,
            success:true,
            data:{
                findData
            },
            msg:'鲜花数据返回成功'
        }
    }
})
/**
 * @route GET api/flowers/query
 * @description 根据鲜花名称进行查询（使用模糊查询）
 * @access      接口公开
 */
flowersRouter.get('/query',async (ctx)=>{
    // 进行模糊查询
    const flowerName =  new RegExp(ctx.query.name, 'i');
    const findData = await Flowers.find(
        {name: flowerName }, null,{
        sort:{price:ctx.query.sort|| 'desc'},
        limit:ctx.query.pageSize == 'undefined' ? 20 : ctx.request.query.pageSize,
        skip: ctx.query.page == 'undefined' ? 0 :(ctx.request.query.page-1) * ctx.request.query.pageSize
        }
    )
    if(findData.length ==0){
        ctx.status = 403
        ctx.body = {
            status:ctx.status,
            msg:'没有此名称产品！',
            success:false
        }
    }else{
        // 向客户端返回数据
        ctx.status = 200
        ctx.body = {
            status:ctx.status,
            success:true,
            data:{
                findData
            },
            msg:'数据返回成功'
        }
    }
})
/**
 * @route GET api/flowers/sort
 * @description 根据鲜花价钱进行排序
 * @access      接口公开
 */
flowersRouter.get('/sort',async (ctx) =>{
    // asc为升序，desc为降序
    const findData = await Flowers.find({},null,{sort:{price:ctx.query.sort|| 'desc'}})
    if(findData.length == 0){
        ctx.status = 403
        ctx.body = {
            status:ctx.status,
            msg:'目前没有商品数据！',
            success:false
        }
    }else{
        // 向客户端返回数据
        ctx.status = 200
        ctx.body = {
            status:ctx.status,
            success:true,
            data:{
                findData
            },
            msg:'数据排序成功'
        }
    }
})
/**
 * @route POST api/flowers/filter
 * @description 根据鲜花种类与价钱排序进行过滤
 * @access      接口公开
 */
flowersRouter.post('/filter',async (ctx) =>{
    // console.log(ctx.request.query,'ctx.request.query');
    
    // asc为升序，desc为降序,默认为降序
    // limit:限制返回多少条
    // skip:限制跳过多少条
    let findData = []
    if(ctx.request.query.type == 'all'){
        findData = await Flowers.find(
            {},null,
            {sort:{price:ctx.request.query.sort|| 'desc'},
            limit:ctx.request.query.pageSize == 'undefined' ? 20 : ctx.request.query.pageSize,
            skip: ctx.request.query.page == 'undefined' ? 0 :(ctx.request.query.page-1) * ctx.request.query.pageSize
            })
    }else{
        findData = await Flowers.find({
            type:ctx.request.query.type
        },null,{sort:{price:ctx.request.query.sort|| 'desc'},
        limit:ctx.request.query.pageSize == 'undefined' ? 20 : ctx.request.query.pageSize,
        skip: ctx.request.query.page == 'undefined' ? 0 :(ctx.request.query.page-1) * ctx.request.query.pageSize})
    }
    if(findData.length == 0){
        ctx.status = 403
        ctx.body = {
            status:ctx.status,
            msg:'目前没有商品数据！',
            success:false
        }
    }else{
        // 向客户端返回数据
        ctx.status = 200
        ctx.body = {
            status:ctx.status,
            success:true,
            data:{
                findData
            },
            msg:'数据返回成功'
        }
    }
})
module.exports = flowersRouter